package net.qiqbframework.messaging.intercepting.annotation;

import net.qiqbframework.common.resolving.ResolveAttributes;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Meta-Annotation 用于将 MessageHandlerInterceptor 带注释的方法划分为仅应对处理程序调用的结果起作用的拦截器。
 * 这使这些处理程序有机会仅对结果执行操作，而不会在 到达 处理程序的途中拦截调用。
 * 可用于 resultType() 限制应为处理程序调用的响应类型。
 * 此注释仅用作元注释，不能直接放置在方法上
 *
 * @see ExceptionHandler
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.ANNOTATION_TYPE})
@ResolveAttributes
public @interface ResultHandler {

    /**
     * The type of result object that the annotated handler should be invoked for. The handler will be ignored if the
     * actual response type (regular or thrown exception) is not an instance of the type defined by this property, even
     * when the parameters of the method match the result.
     */
    Class<?> resultType() default Object.class;
}
